﻿using BCData.Common.EvaluationTag;
using BCDto.Common.EvaluationTag;
using BCEntity.Common.EvaluationTag;
using BCService.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BCService.Common.EvaluationTag
{
    public class EvaluationTagService : IEvaluationTagService
    {
        private readonly IEvaluationTagData evaluationTagData;
        public EvaluationTagService(IEvaluationTagData evaluationTagData)
        {
            this.evaluationTagData = evaluationTagData;
        }

        public long CheckExists(long userId, string tagContent)
        {
            return this.evaluationTagData.CheckExists(userId, tagContent).GetAwaiter().GetResult();
        }

        public long CheckExists(string tagContent, long vehicleId)
        {
            return this.evaluationTagData.CheckExists(tagContent, vehicleId).GetAwaiter().GetResult();
        }

        public EvaluationTagDto Create(EvaluationTagDto evaluationTagDto)
        {
            if (!evaluationTagDto.UserId.HasValue && evaluationTagDto.VehicleId.HasValue)
            {
                throw new ArgumentException("评价标签UserId与VehicleId不能同时为空");
            }

            long evaluationTagId;

            if (evaluationTagDto.UserId.HasValue)
            {
                evaluationTagId = this.evaluationTagData.CheckExists(evaluationTagDto.UserId.Value, evaluationTagDto.TagContent).GetAwaiter().GetResult();
            }
            else
            {
                evaluationTagId = this.evaluationTagData.CheckExists(evaluationTagDto.TagContent, evaluationTagDto.VehicleId.Value).Result;
            }

            if (evaluationTagId == 0)
            {
                var result = this.evaluationTagData.Create(evaluationTagDto.As<EvaluationTagEntity>()).GetAwaiter().GetResult();
                return result.As<EvaluationTagDto>();
            }
            return this.evaluationTagData.UpdateUseCount(evaluationTagId).GetAwaiter().GetResult().As<EvaluationTagDto>();
        }

        public IEnumerable<EvaluationTagDto> GetInComeUseDtos(long? userId, long? driverId)
        {
            var result = this.evaluationTagData.GetInComeUseEntities(userId, driverId).GetAwaiter().GetResult();
            return result.As<IEnumerable<EvaluationTagDto>>();
        }

        public EvaluationTagDto UpdateUseCount(long evaluationTagId)
        {
            var result = this.evaluationTagData.CheckExists(evaluationTagId).GetAwaiter().GetResult();
            if (result == 0)
            {
                throw new ArgumentException("评价标签不存在");
            }
            return this.evaluationTagData.UpdateUseCount(evaluationTagId).GetAwaiter().GetResult().As<EvaluationTagDto>();
        }
    }
}
